package com.bcbim.authentication.menu.mapper;

import com.bcbim.authentication_interface.menu.dao.MenuDAO;
import com.bcbim.authentication_interface.menu.dto.MenuDTO;
import com.bcbim.authentication_interface.menu.dto.ReductionMenuDTO;
import com.bcbim.authentication_interface.menu.dto.RoleAbilityDTO;
import com.bcbim.authentication_interface.menu.vo.MenuDetailVO;
import com.bcbim.authentication_interface.menu.vo.MenuVO;
import com.bcbim.authentication_interface.menu.vo.RoleMenuAbilityVO;
import com.bcbim.authentication_interface.menu.vo.TreeMenuVO;
import com.bcbim.authentication_interface.role.dao.RoleMenuDAO;
import com.bcbim.authentication_interface.role.dto.RoleMenuAbilityDTO;
import com.bcbim.authentication_interface.role.vo.MenuAbilityVO;
import com.bcbim.common.sys.Code;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: 菜单mapper
 * @Author haoshuai
 * @Date 2020/9/27
 * @Version V1.0
 **/
@Mapper
public interface MenuMapper {

    /**
     * @Description: 根据用户ID获取菜单
     * @Param: userId 用户名ID
     * @param applicationPlatform 应用平台 （1为PC，2为app,3为unity）
     * @Return: List<Menu>
     * @Author: zhangfan
     * @Date: 2021/5/17
     */
    List<MenuVO> listMenuApp(@Param("userId") String userId, @Param("applicationPlatform") String applicationPlatform, @Param("id") String id);

    /**
     * @Description: 根据登录用户名, 获取菜单
     * @Param: username 用户名
     * @param: applicationPlatform 应用平台 （1为PC，2为app,3为unity）
     * @Return: List<Menu>
     * @Author: ye
     * @Date: 2020/12/20
     */
    List<MenuVO> getMenuList(@Param("username") String username, @Param("applicationPlatform") String applicationPlatform);


    /**
     * @return int
     * @Description 新增菜单
     * @Author XueHao
     * @Date 2021/8/18
     */
    int insertMenu(MenuDAO menuDO);

    /**
     * @return List<Code>
     * @Description 获取菜单下拉列表
     * @Author XueHao
     * @Date 2021/8/18
     */
    List<Code> selectMenu(MenuDTO menuDTO);

    /**
     * @return int
     * @Description 更新菜单信息
     * @Author XueHao
     * @Date 2021/8/18
     */
    int updateMenu(MenuDAO menuDAO);

    /**
     * @return int
     * @Description 判断是否有子级菜单
     * @Author haomeijie
     * @Date 2021/11/19
     */
    int getMenuCountByParentId(String parentId);

    /**
     * @return List<TreeMenuVO>
     * @Description 菜单信息列表查询
     * @Author XueHao
     * @Date 2021/8/18
     */
    List<TreeMenuVO> listMenu(MenuDTO menuDTO);

    /**
     * 查询菜单详情
     *
     * @param id id
     * @return MenuDetailVO
     * @author XueHao
     * @date 2021/12/1
     */
    MenuDetailVO getMenuDetail(String id);

    /**
     * 查询父级菜单名称
     *
     * @param parentId parentId
     * @return String
     * @author XueHao
     * @date 2021/12/1
     */
    String getParentName(String parentId);

    /**
     * @Description: 根据用户id, 查询拥有权限菜单
     * @Param: userId 用户id
     * @Param: applicationPlatform 应用平台类型
     * @Return: List<RoleMenuVO>
     * @Author: haoshuai
     * @Date: 2021/7/7
     */
    List<RoleMenuAbilityVO> listRoleMenu(@Param("userId") String userId, @Param("applicationPlatform") String applicationPlatform);

    /**
     * @Description: 根据用户id, 查询拥有权限功能
     * @Param: userId 用户id
     * @Param: applicationPlatform 应用平台类型
     * @Return: List<RoleMenuVO>
     * @Author: haoshuai
     * @Date: 2021/7/7
     */
    List<RoleAbilityDTO> listRoleAbility(@Param("userId") String userId, @Param("applicationPlatform") String applicationPlatform);

    /**
     * @Description: 获取所有菜单
     * @Param: applicationPlatform
     * @Return: List<MenuAbilityVO>
     * @Author: ye
     * @Date: 2021/7/7
     */
    List<MenuAbilityVO> getAllMenuByApplication(String applicationPlatform);

    /**
     * @Description: 获取角色拥有菜单权限
     * @Param: RoleMenuAbilityQuery
     * @Return: List<String>
     * @Author: ye
     * @Date: 2021/7/7
     */
    List<String> getRoleMenuAuthentication(RoleMenuAbilityDTO query);

    /**
     * @Description: 保存角色权限
     * @Param: List<RoleMenuDO>
     * @Return:
     * @Author: ye
     * @Date: 2021/7/7
     */
    void saveRoleAuthentication(@Param("list") List<RoleMenuDAO> roleMenuList);

    /**
     * @Description: 获取对应的三级页面id
     * @Param: levelTwoId
     * @Return: List<String>
     * @Author: ye
     * @Date: 2021/7/7
     */
    List<String> getLevelThreeMenu(String levelTwoId);

    /**
     * @Description: 清空用户菜单权限
     * @Param: List<String>
     * @Return:
     * @Author: ye
     * @Date: 2021/7/7
     */
    void clearRoleAuthentication(@Param("roleId") String roleId, @Param("list") List<String> arrayMenuId);

    /**
     * @Description: 区分页面
     * @Param: String[] checkId
     * @Return: List<String>
     * @Author: ye
     * @Date: 2021/7/7
     */
    List<String> distinguishMenu(@Param("list") String[] checkId);

    /**
     * @Description: 查询根节点
     * @Param: levelTwoId
     * @Return: String
     * @Author: ye
     * @Date: 2021/7/7
     */
    String getMenuRootId(String levelTwoId);

    /**
     * @Description: 获取二级菜单数量
     * @Param: roleId
     * @Param: rootId
     * @Return: int
     * @Author: ye
     * @Date: 2021/7/7
     */
    int countRoleLevelTwoMenu(@Param("roleId") String roleId, @Param("rootId") String rootId);

    /**
     * 还原角色菜单：搜索没有修改之前的勾选的菜单id和功能按钮id
     *
     * @param query 查询参数:  角色id：roleId  菜单id：menuId
     * @return 返回没有修改之前的菜单id集合
     * @author wxc
     * @date 2021/10/21
     */
    List<String> reductionMenu(ReductionMenuDTO query);

    /**
     * @Description: 还原角色功能
     * @Param: ReductionMenuDTO
     * @Return: List<String>
     * @Author: ye
     * @Date: 2021/9/13
     */
    List<String> reductionMenuAbility(ReductionMenuDTO query);
}

